/**
    算法描述：
    核心问题：
    解决所需数据结构+算法：
**/
#include<iostream>
#include<cstring>
using namespace std;
int n, a[100010], ans = 0;

// 贪心：找到范围内最小的数，直接切割
void dfs(int l, int r) { // l,r为左右边界(不含r)
    if(l >= r)  return ;
    int MIN = 1e5;
    int left = l;
    for(int i=l; i<r ;i++) // 找最小值
        if(MIN > a[i])
            MIN = a[i];
    ans += MIN;
    for(int i=l; i<r; i++) { // 将0处理
        a[i] -= MIN;
        if(a[i] == 0) {
            dfs(left, i);
            left = i + 1;
        }
    }
    dfs(left, r);
}

int main() {
    memset(a, 0, sizeof(a));
    cin >> n;
    for(int i=0; i<n; i++)  cin >> a[i];
    dfs(0, n);
    cout << ans << endl;
    return 0;
}